/**
 * 自己写的 orm 中间件
 */

const orm = require("orm"); // 使用说明 https://github.com/dresende/node-orm2

let connection = null;

function setup(db) {
  require("./models/demoModel")(orm, db);
}

module.exports = async function(ctx, next) {
  if (connection) {
    await next();
  } else {
    await orm
      .connectAsync("mysql://root:junlian@192.168.1.22:3306/zentao")
      .then(function(db) {
        connection = db;
        /**
         * 包装 Promise 版本的 execQuery
         */
        db.driver.execQueryAsync = function(sql) {
          return new Promise((resolve, reject) => {
            ctx.req.db.driver.execQuery(sql, function(err, data) {
              if (err) {
                reject(err);
              } else {
                resolve(data);
              }
            });
          });
        };
        /**
         * 载入模型
         */
        setup(db);
        ctx.req.models = db.models;
        ctx.req.db = db;
      });
    await next();
  }
};
